package com.example.message.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.message.entity.MessageTemplate;

/**
 * 通知模板服务接口
 */
public interface MessageTemplateService extends IService<MessageTemplate> {
    
    /**
     * 根据模板编码获取模板
     * @param templateCode 模板代码
     * @return 模板对象，如果不存在返回null
     */
    MessageTemplate getByCode(String templateCode);
    
    /**
     * 渲染模板内容（使用Map参数）
     * @param templateCode 模板代码
     * @param params 模板参数Map，key为变量名，value为变量值
     * @return 渲染后的模板内容
     * @throws RuntimeException 当模板不存在或已禁用时抛出异常
     */
    String renderTemplate(String templateCode, java.util.Map<String, Object> params);

	/**
	 * 查询模板列表
	 * @param messageTemplate 查询条件，可包含模板名称、代码、类型、状态等
	 * @return 模板列表，按创建时间倒序排列
	 */
	List<MessageTemplate> selectNoticeTemplateList(MessageTemplate messageTemplate);

	/**
	 * 根据ID查询模板详情
	 * @param templateId 模板ID
	 * @return 模板详情
	 */
	MessageTemplate selectNoticeTemplateById(Long templateId);

	/**
	 * 根据模板代码查询模板
	 * @param templateCode 模板代码
	 * @return 模板对象，只查询启用的模板
	 */
	MessageTemplate selectNoticeTemplateByCode(String templateCode);

	/**
	 * 新增模板
	 * @param messageTemplate 模板对象
	 * @return 插入结果（影响行数）
	 */
	int insertNoticeTemplate(MessageTemplate messageTemplate);

	/**
	 * 更新模板
	 * @param messageTemplate 模板对象
	 * @return 更新结果（影响行数）
	 */
	int updateNoticeTemplate(MessageTemplate messageTemplate);

	/**
	 * 批量删除模板
	 * @param templateIds 模板ID数组
	 * @return 删除的模板数量
	 */
	int deleteNoticeTemplateByIds(Long[] templateIds);

	/**
	 * 渲染模板内容（使用JSON字符串参数）
	 * @param templateCode 模板代码
	 * @param variables 变量JSON字符串，格式如：{"name":"张三","age":25}
	 * @return 渲染后的模板内容
	 * @throws RuntimeException 当模板不存在、已禁用或JSON解析失败时抛出异常
	 */
	String renderTemplate(String templateCode, String variables);
}